package com.aps.server.mapper;

import com.aps.server.entity.BasicEquipMaintenance;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 设备维护记录 Mapper 接口
 * 继承 MyBatis Plus 的 BaseMapper，提供基础的 CRUD 操作
 */
@Mapper
public interface BasicEquipMaintenanceMapper extends BaseMapper<BasicEquipMaintenance> {
    
    /**
     * 根据租户ID查询设备维护记录列表
     * 
     * @param tenantId 租户ID
     * @return 设备维护记录列表
     */
    @Select("SELECT * FROM basic_equip_maintenance WHERE tenant_id = #{tenantId} ORDER BY create_time DESC")
    List<BasicEquipMaintenance> selectByTenantId(@Param("tenantId") String tenantId);
    
    /**
     * 根据租户ID分页查询设备维护记录列表
     * 
     * @param page 分页对象
     * @param tenantId 租户ID
     * @return 分页设备维护记录列表
     */
    @Select("SELECT * FROM basic_equip_maintenance WHERE tenant_id = #{tenantId} ORDER BY create_time DESC")
    IPage<BasicEquipMaintenance> selectPageByTenantId(Page<BasicEquipMaintenance> page, @Param("tenantId") String tenantId);
    
    /**
     * 根据设备编码查询设备维护记录列表
     * 
     * @param equipId 设备编码
     * @param tenantId 租户ID
     * @return 设备维护记录列表
     */
    @Select("SELECT * FROM basic_equip_maintenance WHERE equip_id = #{equipId} AND tenant_id = #{tenantId} ORDER BY equip_maintenance_start_time DESC")
    List<BasicEquipMaintenance> selectByEquipId(@Param("equipId") String equipId, @Param("tenantId") String tenantId);
    
    /**
     * 根据设备编码分页查询设备维护记录列表
     * 
     * @param page 分页对象
     * @param equipId 设备编码
     * @param tenantId 租户ID
     * @return 分页设备维护记录列表
     */
    @Select("SELECT * FROM basic_equip_maintenance WHERE equip_id = #{equipId} AND tenant_id = #{tenantId} ORDER BY equip_maintenance_start_time DESC")
    IPage<BasicEquipMaintenance> selectPageByEquipId(Page<BasicEquipMaintenance> page, @Param("equipId") String equipId, @Param("tenantId") String tenantId);
    
    /**
     * 查询正在维护的设备记录
     * 
     * @param tenantId 租户ID
     * @return 正在维护的设备记录列表
     */
    @Select("SELECT * FROM basic_equip_maintenance WHERE tenant_id = #{tenantId} AND equip_maintenance_start_time <= NOW() AND equip_maintenance_end_time >= NOW() ORDER BY equip_maintenance_start_time DESC")
    List<BasicEquipMaintenance> selectActiveMaintenance(@Param("tenantId") String tenantId);
    
    /**
     * 根据维护时间范围查询设备维护记录列表
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param tenantId 租户ID
     * @return 设备维护记录列表
     */
    @Select("SELECT * FROM basic_equip_maintenance WHERE tenant_id = #{tenantId} AND equip_maintenance_start_time >= #{startTime} AND equip_maintenance_end_time <= #{endTime} ORDER BY equip_maintenance_start_time DESC")
    List<BasicEquipMaintenance> selectByMaintenanceTimeRange(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("tenantId") String tenantId);
    
    /**
     * 根据租户ID统计设备维护记录数量
     * 
     * @param tenantId 租户ID
     * @return 设备维护记录数量
     */
    @Select("SELECT COUNT(*) FROM basic_equip_maintenance WHERE tenant_id = #{tenantId}")
    Long countByTenantId(@Param("tenantId") String tenantId);
    
    /**
     * 根据设备编码统计设备维护记录数量
     * 
     * @param equipId 设备编码
     * @param tenantId 租户ID
     * @return 设备维护记录数量
     */
    @Select("SELECT COUNT(*) FROM basic_equip_maintenance WHERE equip_id = #{equipId} AND tenant_id = #{tenantId}")
    Long countByEquipId(@Param("equipId") String equipId, @Param("tenantId") String tenantId);
}
